package com.xk857.forum.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xk857.entities.Forum;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xk857.feign.req.UserInfoREQ;
import com.xk857.forum.req.ForumUserREQ;
import com.xk857.util.base.BaseRequest;
import com.xk857.util.base.Result;

/**
 * 星空小屋-论坛话题表 服务类
 *
 * @author CV大魔王
 * @since 2021-02-23
 */
public interface IForumService extends IService<Forum> {

    /**
     * 查询热门话题列表
     * @param req 分页查询条件
     * @return 分页话题信息
     */
    IPage<Forum> findHotList(BaseRequest<Forum> req);


    /**
     * 查询最新话题列表
     * @param req 分页查询条件
     * @return 分页话题信息
     */
    IPage<Forum> findNewList(BaseRequest<Forum> req);


    /**
     * 分页查询等待回答列表
     * @param req 分页查询条件
     * @return 话题列表
     */
    IPage<Forum>  findWaitList(BaseRequest<Forum> req);


    /**
     * 根据标签id分页查询话题列表
     * @param req 分页相关的对象
     * @param labelId 标签id
     * @return 话题列表
     */
    IPage<Forum> findListByLabelId(BaseRequest<Forum> req, String labelId);


    /**
     * 通过话题id查询详情
     * @param id 话题id
     * @return 话题信息
     */
    Forum findById(String id);

    /**
     * 更新浏览次数
     * @param id 话题id
     * @return 封装对象
     */
    Result updateViewCount(String id);


    /**
     * 修改或新增话题数据
     * @param forum 话题数据
     * @return 话题id
     */
    String updateOrSave(Forum forum);


    /**
     * 根据id逻辑删除话题
     * @param id 话题id
     */
    void deleteById(String id);


    /**
     * 更新点赞数
     * @param id 话题id
     * @param count 更新后的点赞数
     * @return 结果
     */
    Result updateThumhup(String id, int count);

    /**
     * 根据用户ID查询话题列表
     * @return 话题列表
     */
    IPage<Forum> findListByUserId(ForumUserREQ req);

    /**
     * 查询论坛话题总记录数
     * @return 论坛话题总记录数
     */
    Integer getForumTotal();


    /**
     * 更新问题与回答表中的用户信息
     * @param req 封装请求类
     * @return 逻辑值
     */
    boolean updateUserInfo(UserInfoREQ req);

    /**
     * 查询今日帖子数量
     * @return
     */
    Integer searchCountDayNum();

    /**
     * 查询昨日帖子数量
     * @return
     */
    Integer searchNumberOfArticlesInYesterdaySDay();

    /**
     * 查询近七日帖子数量
     * @return
     */
    Integer searchNumberOfArticlesInWeek();
}
